package com.luntan.school.service;

import com.luntan.school.dao.Page;

import java.util.List;
import java.util.Map;

public interface PostsService {
    /**
     * 获取分类新闻列表
     * @param categoryId 分类编号
     * @return
     */
    List<Posts> getPostsByCategory(Integer categoryId);

    /**
     * 获取标签新闻列表
     * @param tagId 标签编号
     * @return
     */
    List<Posts> getPostsByTag(Integer tagId);

    /**
     * 获取置顶新闻（首页展示）
     * @param limit 限制数量
     * @return
     */
    List<Posts> getStickPosts(int limit);


    /**
     * 获取所有新闻（不分页）
     * @return
     */
    List<Posts> getAllPosts();

    /**
     * 增加新闻
     * @param posts
     */
    Integer addPosts(Posts posts);

    /**
     * 更新新闻
     * @param posts
     */
    void updatePosts(Posts posts);

    /**
     * 根据ID获取新闻
     * @param postsId
     * @return
     */
    Posts getPostsById(int postsId);

    /**
     * 获取热点新闻（24小时内发布或评论，前10条）
     * @return
     */
    List<Posts> getHotPosts();

    /**
     * 获取新闻的推荐新闻（根据新闻标签）
     * @param postsId
     * @return
     */
    List<Posts> getRecommendedPosts(int postsId);

    /**
     * 更新新闻点击计数（+1）
     * @param postsId
     */
    void updateClickCount(int postsId);


    /**
     * 按照分类统计新闻数
     * @return
     */
    List<Map<String, Object>> statPostsCountByCategory();

    /**
     * 按照标签统计新闻籹
     * @return
     */
    List<Map<String, Object>> statPostsCountByTag();


    /**
     * 按照日期统计新闻评论数
     * @return
     */
    List<Map<String, Object>> statPostsCommentCountByDate();


    /**
     * 按照用户统计新闻评论数
     * @return
     */
    List<Map<String, Object>> statPostsCommentCountByUser();

    /**
     * 分页查询新闻列表
     * @param pageNumer 当前分页
     * @param pageSize 分页大小
     * @param key 搜索关键(null或空字符串表示无关键字）
     * @return
     */
    Page<Posts> getPagedPosts(int pageNumer, int pageSize, String key);
}
